package com.example.springboottpl.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springboottpl.dao.LoginLogDao;
import com.example.springboottpl.entity.LoginLogBean;
import com.example.springboottpl.service.LoginLogService;
import com.example.springboottpl.util.Result;
import com.example.springboottpl.util.ResultPage;
import com.example.springboottpl.vo.common.DeleteBatchReqVo;
import com.example.springboottpl.vo.common.QueryDetailReqVo;
import com.example.springboottpl.vo.req.QueryLoginLogReqVo;
import com.example.springboottpl.vo.resp.LoginLogRespVo;

/**
 * 描述：系统访问记录
 * 作者：刘飞华
 * 日期：2025/01/10 15:34:35
 */
@Service
public class LoginLogServiceImpl implements LoginLogService {

    @Autowired
    private LoginLogDao loginLogDao;


    /**
     * 删除系统访问记录
     *
     * @param loginLog 请求参数
     * @return int
     * @author 刘飞华
     * @date: 2025/01/10 15:34:35
     */
    @Override
    public Result<Integer> deleteLoginLog(DeleteBatchReqVo loginLog) {
        int i = loginLogDao.deleteByIds(loginLog.getIds());
        return Result.success(i);
    }

    /**
     * 清空系统访问记录
     *
     * @return int
     * @author 刘飞华
     * @date: 2025/01/10 15:34:35
     */
    @Override
    public Result<Integer> cleanLoginLog() {
        int i = loginLogDao.delete(null);
        return Result.success(i);
    }

    /**
     * 查询系统访问记录详情
     *
     * @param loginLog 请求参数
     * @return LoginLogResp
     * @author 刘飞华
     * @date: 2025/01/10 15:34:35
     */
    @Override
    public Result<LoginLogRespVo> queryLoginLogDetail(QueryDetailReqVo loginLog) {

        LoginLogBean logBean = loginLogDao.selectById(loginLog.getId());
        if (logBean == null) {
            return Result.error("不存在");
        }

        LoginLogRespVo resp = new LoginLogRespVo();
        resp.setId(logBean.getId());//访问ID
        resp.setLoginName(logBean.getLoginName());//登录账号
        resp.setIpaddr(logBean.getIpaddr());//登录IP地址
        resp.setLoginLocation(logBean.getLoginLocation());//登录地点
        resp.setPlatform(logBean.getPlatform());//平台信息
        resp.setBrowser(logBean.getBrowser());//浏览器类型
        resp.setVersion(logBean.getVersion());//浏览器版本
        resp.setOs(logBean.getOs());//操作系统
        resp.setArch(logBean.getArch());//体系结构信息
        resp.setEngine(logBean.getEngine());//渲染引擎信息
        resp.setEngineDetails(logBean.getEngineDetails());//渲染引擎详细信息
        resp.setExtra(logBean.getExtra());//其他信息（可选）
        resp.setStatus(logBean.getStatus());//登录状态(0:失败,1:成功)
        resp.setMsg(logBean.getMsg());//提示消息
        resp.setLoginTime(logBean.getLoginTime());//访问时间

        return Result.success(resp);
    }

    /**
     * 查询系统访问记录列表
     *
     * @param loginLog 请求参数
     * @return LoginLogResp
     * @author 刘飞华
     * @date: 2025/01/10 15:34:35
     */
    @Override
    public Result<ResultPage<LoginLogRespVo>> queryLoginLogList(QueryLoginLogReqVo loginLog) {
        LambdaQueryWrapper<LoginLogBean> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.like(loginLog.getLoginName() != null, LoginLogBean::getLoginName, loginLog.getLoginName());
        queryWrapper.eq(loginLog.getStatus() != null, LoginLogBean::getStatus, loginLog.getStatus());

        Page<LoginLogBean> page = loginLogDao.selectPage(new Page<>(loginLog.getPageNo(), loginLog.getPageSize()), queryWrapper);

        List<LoginLogRespVo> list = new ArrayList<>();

        for (LoginLogBean logBean : page.getRecords()) {
            LoginLogRespVo resp = new LoginLogRespVo();
            resp.setId(logBean.getId());//访问ID
            resp.setLoginName(logBean.getLoginName());//登录账号
            resp.setIpaddr(logBean.getIpaddr());//登录IP地址
            resp.setLoginLocation(logBean.getLoginLocation());//登录地点
            resp.setPlatform(logBean.getPlatform());//平台信息
            resp.setBrowser(logBean.getBrowser());//浏览器类型
            resp.setVersion(logBean.getVersion());//浏览器版本
            resp.setOs(logBean.getOs());//操作系统
            resp.setArch(logBean.getArch());//体系结构信息
            resp.setEngine(logBean.getEngine());//渲染引擎信息
            resp.setEngineDetails(logBean.getEngineDetails());//渲染引擎详细信息
            resp.setExtra(logBean.getExtra());//其他信息（可选）
            resp.setStatus(logBean.getStatus());//登录状态(0:失败,1:成功)
            resp.setMsg(logBean.getMsg());//提示消息
            resp.setLoginTime(logBean.getLoginTime());//访问时间
            list.add(resp);
        }

        return Result.success(new ResultPage<>(list, page.getCurrent(), page.getSize(), page.getTotal()));

    }
}